//
//  HomeTableViewController.swift
//  Weibo10
//
//  Created by male on 15/10/14.
//  Copyright © 2015年 itheima. All rights reserved.
//

import UIKit
import SVProgressHUD

/// 原创微博 Cell 的可重用表示符号
let StatusCellNormalId = "StatusCellNormalId"
/// 转发微博 Cell 的可重用表示符号
let RetweetedStatusCellId = "RetweetedStatusCellId"

class HomeTableViewController: VisitorTableViewController {

    /// 微博数据列表模型
    private lazy var listViewModel = StatusListViewModel()
    override func viewDidLoad() {
        super.viewDidLoad()

        if !SYLJUserAccountViewModel.sharedUserAccountViewModel.userLogon {
            visitorView?.setupInfo(nil, title: "关注一些人，回这里看看有什么惊喜")
            return
        }
        
        prepareTableView()
        loadData()
        //注册通知
        NSNotificationCenter.defaultCenter().addObserverForName(WBStatusSelectedPhotoNotification, object: nil
            , queue: nil) { (n) -> Void in
//                print(n)
        }
    }
    /// 注销通知
    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
    /// 准备表格
    private func prepareTableView() {
        // 注册可重用 cell
        tableView.registerClass(NormalIdStatusCell.self, forCellReuseIdentifier: StatusCellNormalId)
        tableView.registerClass(RetweetedStatusCell.self, forCellReuseIdentifier: RetweetedStatusCellId)
        // 取消分割线
        tableView.separatorStyle = .None
        // 设置Cell的高度
        // 自动计算行高 - 需要一个自上而下的自动布局的控件，指定一个向下的约束
        tableView.estimatedRowHeight = 400
        tableView.rowHeight = 400
        //        tableView.rowHeight = UITableViewAutomaticDimension
        //MARK: - 下拉刷新
        //        print(refreshControl)
        refreshControl = SYLJRefreshControl()
        refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
        
        // 上来刷新
        tableView.tableFooterView = pullupView
//        pullupView.startAnimating()
    }
    
    /// 加载数据
    @objc private func loadData() {
        
//        print("景甜")
        refreshControl?.beginRefreshing()
        listViewModel.loadStatus(isPullData: pullupView.isAnimating()) { (isSuccessed) -> () in
            self.refreshControl?.endRefreshing() //关闭刷新按钮
            self.pullupView.stopAnimating()  //关闭上拉刷新动画
            if !isSuccessed {
                SVProgressHUD.showInfoWithStatus("加载数据错误，请稍后再试")
                return
            }
            // 查看模型中的数据是否正确
//            print(self.listViewModel.statusList)
            
            // 刷新数据
            self.tableView.reloadData()
        }
 
    }
    
    // MARK: - 懒加载控件
    // 上来刷新视图
    private lazy var pullupView: UIActivityIndicatorView = {
        let indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        indicator.color = UIColor.greenColor()
        
        return indicator
    }()

}

// MARK: - UITableViewDelegate
extension HomeTableViewController {

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return listViewModel.statusList.count
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let vm = listViewModel.statusList[indexPath.row]
        let cell = tableView.dequeueReusableCellWithIdentifier(vm.cellId, forIndexPath: indexPath) as! StatusCell
        cell.viewModle = vm
        if indexPath.row == listViewModel.statusList.count - 1 && !pullupView.isAnimating() {
            pullupView.startAnimating()
            loadData()
//            print("毛晓彤")
        }
        return cell
    }
    
    // 在实际的开发中由于计算Cell的高度的代理方法会被频繁调用,因此对于Cell的行高必须要缓存
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return listViewModel.statusList[indexPath.row].rowHeight
    }
    
}